% visualize_conv_case0.m
% 专门为Conv_Case0生成的可视化脚本
% 直接从build目录读取数据并生成图表

% 清理工作空间
clear; clc; close all;

% 添加绘图函数路径
addpath('matlab_visualization');

% 配置
case_name = 'Conv_Case0';
data_dir = fullfile('build', 'output', 'visualizations');  % 实际数据路径
output_dir = fullfile('visualization_results', case_name);  % 专门的输出目录

% 创建输出目录
if ~exist(output_dir, 'dir')
    mkdir(output_dir);
end

fprintf('=== Conv_Case0 可视化结果生成 ===\n');
fprintf('数据目录: %s\n', data_dir);
fprintf('输出目录: %s\n', output_dir);
fprintf('================================\n');

% 检查数据目录是否存在
if ~exist(data_dir, 'dir')
    error('数据目录未找到: %s\n请先运行C++程序生成数据', data_dir);
end

% 1. 绘制帕累托前沿图
fprintf('1. 正在绘制帕累托前沿图...\n');
pareto_file = fullfile(data_dir, [case_name '_pareto_solutions.csv']);
if exist(pareto_file, 'file')
    try
        plot_pareto_front_from_csv(pareto_file, output_dir, case_name);
        fprintf('   ✓ 帕累托前沿图生成成功\n');
    catch ME
        fprintf('   ✗ 帕累托前沿图生成失败: %s\n', ME.message);
    end
else
    fprintf('   ⚠ 未找到文件: %s\n', pareto_file);
end

% 2. 绘制优化收敛曲线
fprintf('2. 正在绘制优化收敛曲线...\n');
conv_file = fullfile(data_dir, [case_name '_convergence_history.csv']);
if exist(conv_file, 'file')
    try
        plot_convergence_from_csv(conv_file, output_dir, case_name);
        fprintf('   ✓ 优化收敛曲线生成成功\n');
    catch ME
        fprintf('   ✗ 优化收敛曲线生成失败: %s\n', ME.message);
    end
else
    fprintf('   ⚠ 未找到文件: %s\n', conv_file);
end

% 3. 绘制内存使用统计图
fprintf('3. 正在绘制内存使用统计图...\n');
stats_file = fullfile(data_dir, [case_name '_memory_usage_stats.csv']);
if exist(stats_file, 'file')
    try
        plot_memory_stats_from_csv(stats_file, output_dir, case_name);
        fprintf('   ✓ 内存使用统计图生成成功\n');
    catch ME
        fprintf('   ✗ 内存使用统计图生成失败: %s\n', ME.message);
    end
else
    fprintf('   ⚠ 未找到文件: %s\n', stats_file);
end

% 4. 绘制内存分配甘特图 (数据量大，可能较慢)
fprintf('4. 正在绘制内存分配甘特图 (可能较慢)...\n');
alloc_file = fullfile(data_dir, [case_name '_memory_allocation_history.csv']);
if exist(alloc_file, 'file')
    try
        plot_memory_gantt_from_csv(alloc_file, output_dir, case_name);
        fprintf('   ✓ 内存分配甘特图生成成功\n');
    catch ME
        fprintf('   ✗ 内存分配甘特图生成失败: %s\n', ME.message);
    end
else
    fprintf('   ⚠ 未找到文件: %s\n', alloc_file);
end

% 5. 绘制Buffer生命周期图 (数据量大，可能较慢)
fprintf('5. 正在绘制Buffer生命周期图 (可能较慢)...\n');
lifetime_file = fullfile(data_dir, [case_name '_buffer_lifetimes.csv']);
if exist(lifetime_file, 'file')
    try
        plot_buffer_lifetimes_from_csv(lifetime_file, output_dir, case_name);
        fprintf('   ✓ Buffer生命周期图生成成功\n');
    catch ME
        fprintf('   ✗ Buffer生命周期图生成失败: %s\n', ME.message);
    end
else
    fprintf('   ⚠ 未找到文件: %s\n', lifetime_file);
end

fprintf('================================\n');
fprintf('=== 可视化完成！ ===\n');
fprintf('所有图表已保存到: %s\n', output_dir);
fprintf('包含以下文件:\n');

% 列出生成的文件
if exist(output_dir, 'dir')
    files = dir(fullfile(output_dir, '*.png'));
    for i = 1:length(files)
        fprintf('  - %s\n', files(i).name);
    end
end

% 打开输出目录
if ispc
    winopen(output_dir);
elseif ismac
    system(['open ' output_dir]);
else
    system(['xdg-open ' output_dir]);
end
